package com.vlin.token;

import com.vlin.token.exception.TokenException;

public abstract class AbstractTokenManager implements TokenManager {

	
	public Token getToken(String key) {
		Token token = null;
		if(useTokenCache()) {
			token = getTokenCacheManager().getToken(key);
		}
		if(token == null) {
			token = refreshToken();
			
		}
		if(token != null && useTokenCache()) {
			setDefaultTokenKey(token.getId());
			getTokenCacheManager().cacheToken(token);
		}
		return doGetToken(token);
	}
	
	public Token doGetToken(Token token) { 
		return token; 
	}
	
	@Override
	public Token refreshToken() {
		if(getTokenRefresher() == null) {
			throw new TokenException();
		}
		return getTokenRefresher().refreshToken();
	}

	@Override
	public Token refreshToken(Token token) {
		if(getTokenRefresher() == null) {
			throw new TokenException();
		}
		return getTokenRefresher().refreshToken(token);
	}
	
	
}
